package org.jypj.dev.service.impl;


import java.util.*;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;
import org.jypj.dev.model.CodeData;
import org.jypj.dev.dao.ICodeDataDao;
import org.jypj.dev.service.ICodeDataService;
import org.jypj.dev.util.Page;

@Service("codeDataService")
public class CodeDataServiceImpl implements ICodeDataService {

    @Resource
    private ICodeDataDao codeDataDao;

    /**
     * 保存
     * 字段为空的不存防止覆盖存在默认值的字段
     *
     * @param codeData
     * @return 保存后的对象包括ID
     */
    public int saveCodeDataByField(CodeData codeData) {
        String uuid = UUID.randomUUID().toString().replace("-", "").trim();
        codeData.setId(uuid);
        return codeDataDao.saveCodeDataByField(codeData);
    }

    /**
     * 保存
     * 所有字段全都保存
     *
     * @param codeData
     * @return 保存后的对象包括ID
     */
    public int saveCodeData(CodeData codeData) {
        String uuid = UUID.randomUUID().toString().replace("-", "").trim();
        codeData.setId(uuid);
        return codeDataDao.saveCodeData(codeData);
    }

    /**
     * 根据ID删除
     *
     * @param id 主键ID
     * @return 删除记录数
     */
    public int deleteCodeDataById(String id) {

        return codeDataDao.deleteCodeDataById(id);
    }

    /**
     * 根据对象删除
     *
     * @param id 主键ID
     * @return
     */
    public int deleteCodeDataByObject(CodeData codeData) {

        return codeDataDao.deleteCodeDataByObject(codeData);
    }

    /**
     * 更新
     * 只更新值不为空的字段
     *
     * @param codeData
     * @return 保存后的对象包括ID
     */
    public int updateCodeDataByField(CodeData codeData) {

        return codeDataDao.updateCodeDataByField(codeData);
    }

    /**
     * 更新
     * 更新所有字段
     *
     * @param codeData
     * @return 保存后的对象包括ID
     */
    public int updateCodeData(CodeData codeData) {

        return codeDataDao.updateCodeData(codeData);
    }

    /**
     * 按ID查询
     *
     * @return CodeData
     * @parm id 主键ID
     */
    public CodeData selectCodeDataById(String id) {

        return codeDataDao.selectCodeDataById(id);
    }

    /**
     * 分页查询 包含条件
     *
     * @param page 分页对象
     * @param map  查询条件
     * @return List<CodeData>
     */
    public Page selectOnePageByMap(Page page, Map<String, Object> map) {
        List<CodeData> codeDatas = codeDataDao.selectOnePageByMap(page, map);
        if (codeDatas != null && codeDatas.size() > 0) {
            page.setResult(codeDatas);
        } else {
            page.setResult(new ArrayList<CodeData>());
        }
        return page;
    }

    /**
     * 分页查询 包含对象条件
     *
     * @param page     分页对象
     * @param codeData 查询条件
     * @return Page
     */
    public Page selectOnePageByCodeData(Page page, CodeData codeData) {
        List<CodeData> codeDatas = codeDataDao.selectOnePageByCodeData(page, codeData);
        if (codeDatas != null && codeDatas.size() > 0) {
            page.setResult(codeDatas);
        } else {
            page.setResult(new ArrayList<CodeData>());
        }
        return page;
    }

    /**
     * 按条件查询全部的
     *
     * @param map 查询条件
     * @return List<CodeData>
     */
    public List<CodeData> selectAllByMap(Map<String, Object> map) {
        return codeDataDao.selectAllByMap(map);
    }


    /**
     * 按条件查询全部的
     *
     * @param map 查询条件
     * @return List<CodeData>
     */
    public List<CodeData> selectAllByCodeData(CodeData codeData) {

        return codeDataDao.selectAllByCodeData(codeData);
    }

    /**
     * 按条件查询单个对象
     *
     * @param map 查询条件
     * @return CodeData
     */
    public CodeData selectObjectByMap(Map<String, Object> map) {

        return codeDataDao.selectObjectByMap(map);
    }

    /**
     * 按条件查询单个对象
     *
     * @param map 查询条件
     * @return CodeData
     */
    public CodeData selectObjectByCodeData(CodeData codeData) {

        return codeDataDao.selectObjectByCodeData(codeData);
    }

    /**
     * 根据itemValue查询文本
     *
     * @param itemValue
     * @param code
     * @return
     */
    public String selectItemTextByItemValue(String code, String itemValue) {
        Map<String, Object> queryMap = new HashMap<>();
        queryMap.put("code", code);
        queryMap.put("itemValue", itemValue);
        CodeData codeData = codeDataDao.selectObjectByMap(queryMap);
        if (null != codeData) {
            return codeData.getItemText();
        }
        return "";
    }

    /**
     * 根据itemValue查询文本
     *
     * @param itemValue
     * @param code
     * @return
     */
    public CodeData selectCodeDataByItemValue(String code, String itemValue) {
        Map<String, Object> queryMap = new HashMap<>();
        queryMap.put("code", code);
        queryMap.put("itemValue", itemValue);
        CodeData codeData = codeDataDao.selectObjectByMap(queryMap);
        return codeData;
    }

    public List<CodeData> selectAllByCode(String code) {
        Map<String, Object> queryMap = new HashMap<>();
        queryMap.put("code", code);
        List<CodeData> codeDatas = codeDataDao.selectAllByMap(queryMap);
        return codeDatas;
    }
}